module DSP_SPI(
    input sys_rst_n,    //复位信号
    input sysclk,       //系统时钟50M
    output T_en,          //转接板方向控制
    input T_rx,         //T编码器接收线
    output T_tx,        //T编码器发送线
    output E_en,          //转接板方向控制
    input E_rx,         //E编码器接收线
    output E_tx,        //E编码器发送线
    output E_txclk,     //E编码器时钟发送线
    output data,        //SPI通讯数据线
    output data_clk,    //SPI通讯时钟发送线
    input dsp_tx        //DSP IO电平输入
);
wire clk_Encoder;
wire clk_50M;
wire clk_2M;
wire clk_4M;
wire clk_SPI;
wire locked;
wire SPI_tx_flag;
wire [47:0]Encoder_data;
wire [32:0]Endat_data;

pll_ipcore u_pll(//时钟分频模块，用于调试
    .areset         (~sys_rst_n),
    .inclk0         (sysclk),
    .c0             (clk_Encoder),//2.5MHz
    .c1             (clk_SPI),    //25MHz
    .c2             (clk_50M),    //50MHz
    .c3             (clk_2M),    //2MHz
    .c4             (clk_4M),    //4MHz
    .locked         (locked)
);

//FPGA作为主站，DSP为从站，波特率25M
SPI_tx spi_tx(
    .sys_rst_n (sys_rst_n),      //外部复位信号，低有效
    .SPI_clk   (clk_SPI),        //DSP发送时钟
    .sys_clk   (clk_50M),        //DSP发送时钟的两倍
    .Encoder_data(Encoder_data), //编码器数据输入线
    .SPI_tx_en (SPI_tx_flag),    //接收到编码器数据发送开始的标志信号
    .tx_data (data),             //SPI发送的数据线
    .tx_data_clk(data_clk),      //SPI发送的时钟线
    .dsp_tx(dsp_tx)
);


tamagawa_Encoder_read t1(
    .sys_rst_n(sys_rst_n),       //复位信号
    .clk(clk_Encoder),           //模块时钟
    .dir_flag(T_en),               //开始工作标志
    .rx_data(T_rx),                //编码器接收线
    .tx_data(T_tx),                //编码器发送线
    .data(Encoder_data),         //编码器数据处理结果
    .SPI_tx_flag(SPI_tx_flag)    //SPI发送开始标志
);

Endat_Encoder_read e1(
    .sys_rst_n(sys_rst_n),      //复位信号
    .clk_2M(clk_2M),            //时钟输入2M
    .clk_4M(clk_4M),            //时钟输入4M
//    input wire start_flag,    //模块开始工作信号
    .encoder_data(E_rx),        //编码器返回数据线
    .sendclk_2M(E_txclk),       //时钟输出
    .command(E_tx),             //发送指令线
    .data_buffer(Endat_data),
    .dir_flag(E_en),            //用于控制转接板发送接收
    .data_ready()               //数据接收完成标志
);
endmodule
